package heartbeat

import (
	"log"
	"net/http"
	"xiaoniu-registry/internal/cache"
	"xiaoniu-registry/internal/response"
)

// BeatHandler 心跳处理器
// 处理微服务实例客户端发过来的心跳，证明该服务是正常的，也就是健康状态
// 如果一段时间内收不到该微服务的心跳，先把该实例置为不健康状态，暂定为15秒
// 如果更长时间内收不到该微服务实例的心跳，那么直接将该实例从所在服务下面的实例中删除
// 如果某个服务下面没有实例了，那么整个服务应该也要从服务列表中被剔除
//
// NOTICE：Nacos中有永久实例的概念，后续如果有空再实现。
// GET /api/beat?serviceName=&ip=&port=
func BeatHandler(w http.ResponseWriter, req *http.Request) {
	serviceName := req.URL.Query().Get("serviceName")
	ip := req.URL.Query().Get("ip")
	port := req.URL.Query().Get("port")

	// 参数验证
	if serviceName == "" || ip == "" || port == "" {
		response.BadRequest(w, "serviceName、ip、port参数不能为空")
		return
	}

	log.Printf("Received heartbeat: service=%s, ip=%s, port=%s", serviceName, ip, port)
	cache.UpdateLastBeatTime(serviceName, ip, port)
	response.SuccessWithMessage(w, "心跳成功", nil)
}

// 校验参数是否正确
func check(serviceName, ip, port string) bool {
	if serviceName == "" || ip == "" || port == "" {
		return false
	}
	return true
}
